import 'package:flutter/foundation.dart';
import 'package:get/get.dart';
import './index.dart';


/// 服务定位器 - 统一管理所有GetX服务的注册和初始化
class ServiceLocator {
  /// 初始化所有服务
  static Future<void> init() async {
    debugPrint('🚀 开始初始化服务...');
    
    try {
      // 注册存储服务（永久服务，应用生命周期内保持）
      Get.put<StorageService>(StorageService(), permanent: true);
      
      // 等待存储服务初始化完成
      await Get.find<StorageService>().onInit();
      
      // 注册网络服务
      Get.put<ApiService>(ApiService(), permanent: true);
      
      // 注册认证API服务
      Get.put<AuthService>(AuthService(), permanent: true);
      
      // 注册业务API服务
      // Get.put<DeviceApiService>(DeviceApiService(), permanent: true);
      // Get.put<OrderApiService>(OrderApiService(), permanent: true);
      // Get.put<MessageApiService>(MessageApiService(), permanent: true);
      
      // 这里可以继续注册其他服务
      // 例如：主题服务、推送服务等
      // Get.put<ThemeService>(ThemeService(), permanent: true);
      
      debugPrint('✅ 所有服务初始化完成');
      
      // 打印服务注册状态（仅在调试模式下）
      _printServiceStatus();
      
    } catch (e) {
      debugPrint('❌ 服务初始化失败: $e');
      rethrow;
    }
  }
  
  /// 打印服务注册状态（调试用）
  static void _printServiceStatus() {
    debugPrint('==================== 服务状态 ====================');
    
    // 检查存储服务
    if (Get.isRegistered<StorageService>()) {
      final storageService = Get.find<StorageService>();    
      debugPrint('✅ StorageService: 已注册');
      debugPrint('   - 登录状态: ${storageService.isLoggedIn}');
      debugPrint('   - 语言设置: ${storageService.language}');
      debugPrint('   - 主题模式: ${storageService.themeMode}');
      debugPrint('   - 首次启动: ${storageService.isFirstLaunch}');
    } else {
      debugPrint('❌ StorageService: 未注册');
    }
    
    // 这里可以检查其他服务的状态
    // if (Get.isRegistered<NetworkService>()) {
    //   debugPrint('✅ NetworkService: 已注册');
    // } else {
    //   debugPrint('❌ NetworkService: 未注册');
    // }
    
    debugPrint('================================================');
  }
  
  /// 获取存储服务
  static StorageService get storage => Get.find<StorageService>();
  
  /// 检查服务是否已注册
  static bool isServiceRegistered<T>() {
    return Get.isRegistered<T>();
  }
  
  /// 重新初始化服务（谨慎使用）
  static Future<void> reinit() async {
    debugPrint('🔄 重新初始化服务...');
    
    // 删除现有服务
    if (Get.isRegistered<StorageService>()) {
      Get.delete<StorageService>();
    }
    
    // 重新初始化
    await init();
  }
  
  /// 清理所有服务（应用退出时调用）
  static void dispose() {
    debugPrint('🧹 清理所有服务...');
    
    try {
      // 清理存储服务
      if (Get.isRegistered<StorageService>()) {
        Get.delete<StorageService>();
        debugPrint('✅ StorageService 已清理');
      }
      
      // 这里可以清理其他服务
      // if (Get.isRegistered<NetworkService>()) {
      //   Get.delete<NetworkService>();
      //   debugPrint('✅ NetworkService 已清理');
      // }
      
      debugPrint('✅ 所有服务已清理');
    } catch (e) {
      debugPrint('❌ 服务清理失败: $e');
    }
  }
  
  /// 获取服务统计信息
  static Map<String, dynamic> getServiceStats() {
    return {
      'registeredServices': [
        if (Get.isRegistered<StorageService>()) 'StorageService',
        // 这里可以添加其他服务
      ],
      'totalServices': Get.isRegistered<StorageService>() ? 1 : 0,
      'storageStats': Get.isRegistered<StorageService>() 
          ? Get.find<StorageService>().getStorageStats() 
          : null,
    };
  }
}
